package org.hyf.inspur.LessonDesin.clear.count3;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;

public class SortMain {

    /**
     * @param args[0]：输入路径（个人地址统计结果数据） args[1]：结果输出路径
     *                                 args[2]：排序字段（用户id）=1
     *                                 args[3]：排序值（访问次数）=2
     *                                 args[4]：top取值最大范围   =5
     *                                 Description：mapreduce统计用户访问热门地址，取前N条记录
     */
    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        //设置map和reduce内存使用大小
        conf.set("mapreduce.map.memory.mb", "3072");
        conf.set("mapreduce.reduce.memory.mb", "2048");
        //参数传递
        //排序字段：用户ID
        conf.set("topkey", "1");
        //排序值：PV访问量
        conf.set("topvalue", "2");
        //排序取前N条记录：前五条
        conf.set("topn", "3");
        Job job = Job.getInstance(conf, "Dx_TopN");
        job.setJarByClass(SortMain.class);
        //map与reduce设置
        job.setMapperClass(TopNMapper.class);
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(Text.class);
        job.setReducerClass(TopNReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(Text.class);
        //输入路径
        FileInputFormat.addInputPath(job, new Path("d://data/output/output2/part-r-00*"));
        //输出路径
        FileOutputFormat.setOutputPath(job, new Path("d://data/output/output4"));
        //提交作业 判断退出条件（0正常退出，1非正常退出）
        System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}
